package com.sicheng.lc.lc笔试.美团篇;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author zsc
 * @version 1.0
 * @date 2022/8/13 16:37
 */
public class 三元组 {
    /**
     * 给一个长度为n的序列a[1], a[2], …, a[n]，
     * 请问有多少个三元组(i,j,k)满足i<j<k且a[i]-a[j]=2a[j]-a[k]？输出符合要求的三元组的数量。
     * <p>
     * <p>
     * <p>
     * 输入描述
     * 第一行是一个整数n，表示序列长度为n。
     * <p>
     * 接下来一行n个用空格隔开的整数，a[i]表示序列的第i个数。
     * <p>
     * 1<=n<=4000, 0<=a[i]<=1000000
     * <p>
     * 输出描述
     * 一行一个整数，表示符合要求的三元组数量。
     */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] nums = new int[n];
        for (int i = 0; i < nums.length; i++) {
            nums[i] = in.nextInt();
        }

        Arrays.sort(nums);
        int res = 0;
        for (int i = 0; i < nums.length - 2; i++) {
            int k = nums.length - 1;
            while (k > i + 1) {
                int t = nums[i] + nums[k];
                k--;
                if (t % 3 != 0)
                    continue;
                int l = leftSearch(nums, t / 3, i + 1, k);
                int r = rightSearch(nums, t / 3, i + 1, k);
                if (l == -1 || r == -1)
                    continue;
                res += r - l + 1;
            }
        }

        System.out.println(res);
    }

    public static int leftSearch(int[] nums, int x, int st, int end) {
        int l = st, r = end;
        while (l <= r) {
            int mid = l + r >> 1;
            if (nums[mid] >= x) {
                r = mid - 1;
            } else {
                l = mid + 1;
            }
        }
        if (l <= end || nums[l] != x)
            return -1;
        return l;
    }

    public static int rightSearch(int[] nums, int x, int st, int end) {
        int l = st, r = end;
        while (l <= r) {
            int mid = l + r >> 1;
            if (nums[mid] <= x) {
                l = mid + 1;
            } else {
                r = mid - 1;
            }
        }
        if (r >= st || nums[r] != x)
            return -1;
        return r;
    }


}
